
public class Lista implements Structura {
	protected int lista[];
	private static int n;	//dimensiunea listei
	private static int dim;	//dimensiunea maxima a listei
	
	//constructor implicit
	public Lista(){
		n=0;
		dim=10;
		lista = new int[dim];
	}
	
	//constructor explicit
	public Lista(int dimensiune){
		n=0;
		dim=dimensiune;
		lista=new int[dim];
	}
	
	
	//returneaza lista
	public int[] getLista(){
		return this.lista;
	}
	
	//seteaza elementele listei
	public void setLista(int l[]){
		int n2=l.length;
	    for(int i=0; i<n2; i++)
	    	this.lista[i]=l[i];
	}
	
	
	//adauga elemente in lista daca acest lucru este posibil
	public void adauga(int elem){
		if(n >= dim){
			System.out.println("Lista este plina, nu se poate adauga in ea ");
		}
		else{
			lista[n]=elem;
			n++;
		}
	}
	
	//suprimarea unui element din lista
	public void sterge(int elem){
		int i=0;
		for (i=0; i<n; i++)
			if (lista[i] == elem){
				lista[i] = lista[n-1];
				n--;
				i--;
			}
	}
	
	//inserarea in lista folosind o lista ajutatoare
	public void inserareLaIndice(int indice, int elem){
		if(( indice >= 0)&& ( indice < dim )){
			int aux[] = new int[dim];
		
			int i=0;
			for(i=0; i<indice ;i++)
				aux[i]=this.lista[i];
           
			aux[i]=elem;
			n++;
			i++;
			
			for( ; i<n; i++)
				aux[i]=this.lista[i-1];
        
           //daca indicele este in afara listei, elementele pana la indice se completeaza cu 0
			if(indice > n){
				n = indice;
				for (; i<n; i++)
					lista[i]=0;
				n++;
			}
        
			this.setLista(aux);
		}
		else
			System.out.println("Indice nu se poate reprezenta in lista!");
	}
	
	//inserarea eficienta fara a folosi un vector ajutator
	public void inserareLaIndice2(int indeice, int elem){
		
		
	}
	
	
	//afisarea listei
	public void afiseaza(){
		if( n > 0 ){
			System.out.print("Lista:(");
			for(int i=0;i<n-1;i++)						//merge doar pana la n-2 deoarece dorim ca ultimul element sa fie afisat cu ) dupa
				System.out.print(this.lista[i]+",");
			System.out.println(this.lista[n-1]+")");	//pentru a afisa sfarsitul listei urmat de ) si new line dupa el
		}
		else
			System.out.println("Lista  vida");
	}
	

}
